群晖nas中使用Container Manager部署jeecg前端后端

您所在的位置:网站首页 群晖网页版 网扯 群晖nas中使用Container Manager部署jeecg前端后端

群晖nas中使用Container Manager部署jeecg前端后端

2023-06-10 12:49| 来源: 网络整理| 查看: 265

本文试验部署Jeccg前端后端。

器材使用升级DSM系统到7.2的群晖某型号nas(X86的cpu)。 步骤:

准备工作 清除浏览器数据

避免之前缓存误导你。也可以下载一个新的浏览器,专门用于测试。 在这里插入图片描述

积累相关知识 学习分别部署前端和后端,这样比较有利于发现问题,解决问题。 可以看看我之前发的两篇文章,体会一下需要预习的docker有关知识。注意我的文章内容只是代表我自己的理解,不代表一定正确。

虽然群晖无法搜索注册表(据说因为docker hub网址被墙了),但是我们可以配置镜像加速。这样通过docker-compose部署时,拉取具体版本的镜像时,速度非常快。只要在yaml里设置好具体的镜像名称和版本,拉取时完全不受墙的影响。 在这里插入图片描述 docker镜像加速可以参考其他文章。我自己使用的是:

微软云 https://dockerhub.azk8s.com 网易 https://hub-mirror.c.163.com 谷歌云 https://gcr.io 部署前端

在这里插入图片描述

idea中下载github网址的项目源代码。 修改“.env.production”文件内容,localhost替换为你想部署的后端的ip 终端运行命令行: pnpm run build 打包生成前端dist文件夹。 压缩上传到nas。具体位置详见dockerc-compose.yml文件内容。可以根据你的实际情况略作调整。要领就是在nas中建立“nginx”目录,该目录下建立“conf”、“logs”、“dist”三个目录,分别存放配置文件、日志、压缩后前端网页。 conf目录里建立一个名称为“nginx.conf”的文件。内容如下:

server { listen 80; location ^~ /jeecg-boot { proxy_pass http://192.168.1.216:8080/jeecg-boot/; proxy_set_header Host jeecg-boot-system; proxy_set_header X-Real-IP \$remote_addr; proxy_set_header X-Forwarded-For \$proxy_add_x_forwarded_for; } #解决Router(mode: 'history')模式下,刷新路由地址不能找到页面的问题 location / { root /var/www/html/; index index.html index.htm; if (!-e \$request_filename) { rewrite ^(.*)\$ /index.html?s=\$1 last; break; } } access_log /var/log/nginx/access.log; }

群晖中点击路径可以自动导入docker-compose.yml文件内容来部署容器: 在这里插入图片描述

yaml配置内容:

version: '3' services: jeecg-boot-nginx: container_name: nginx_jeecg_vue2 image: nginx:1.24.0 ports: - 88:80 #选用88端口就是为了避免nas里有已经运行在端口80的nginx或web station,导致端口冲突,而造成本容器无法运行 expose: - 88 hostname: nginx20230603 volumes: - /volume1/docker/前端目录/nginx/dist:/var/www/html/ - /volume1/docker/前端目录/nginx/conf/nginx.conf:/etc/nginx/conf.d/default.conf - /volume1/docker/前端目录/nginx/logs:/var/log/nginx restart: always

注意上面端口的变化。nginx在容器里跑80端口,但是项目暴露到互联网是88端口。目的是为了避免与nas本身的web station端口冲突。

部署后端

idea下载导入github网站上jeecg的后端项目源代码 看下面截图 在这里插入图片描述

修改dev的配置文件,数据库设置好密码,数据库网址ip设置为以域名方式连接。如上图。mysql和redis都是通过域名连接。这样可以在今后进行部署到其他ip时不用修改,减少工作量。 Maven选择dev,双击install,生成target目录,找到“jeecg-system-start-3.5.1.jar”。将此jar文件压缩上传到nas的相应目录。 群晖中点击路径可以自动导入docker-compose.yml文件内容来部署容器: 在这里插入图片描述

在这里插入图片描述

具体见yaml配置内容:

version: '3' services: jeecg-boot-mysql: container_name: mysql_for_jeecg image: mysql:8.0.19 environment: MYSQL_ROOT_PASSWORD: '此处为mysq密码' MYSQL_ROOT_HOST: '%' TZ: Asia/Shanghai restart: always ports: - 3306:3306 expose: - 3306 hostname: mysql20230603 volumes: - /volume1/docker/后端目录/mysql/mysql:/var/lib/mysql command: --character-set-server=utf8mb4 --collation-server=utf8mb4_general_ci --explicit_defaults_for_timestamp=true --lower_case_table_names=1 --max_allowed_packet=128M --default-authentication-plugin=caching_sha2_password jeecg-boot-redis: container_name: redis_for_jeecg image: redis:5.0 ports: - 6379:6379 expose: - 6379 hostname: redis20230603 restart: always command: --requirepass "此处为redis密码" jeecg-boot-system: build: context: /volume1/docker/后端目录/tomcat/ image: jeecg-boot-system #因为有上面参数context指定了目录,所以容器会调用那个目录里的Dockerfile生成镜像jeecg-boot-system restart: always container_name: tomcat_for_jeecg hostname: tomcat20230603 volumes: - /volume1/docker/后端目录/tomcat/upFiles:/opt/upFiles - /volume1/docker/后端目录/tomcat/workspace/jeecg-boot:/workspace/jeecg-boot ports: - 8080:8080 expose: - 8080 depends_on: - jeecg-boot-redis - jeecg-boot-mysql extra_hosts: - jeecg-boot-mysql:192.168.1.216 - jeecg-boot-redis:192.168.1.216 - jeecg-boot-system:192.168.1.216 #extra_hosts参数使用services的服务名来映射IP

请将“后端目录”替换为你自己的目录名称。注意每一行一定要仔细检查,否则出错都不知道哪里错了。 注意:jeecg-boot的源代码中“dev”配置文件与“prod”配置文件内容不同。例如: “application-prod.yml”第177行,“uploadType: alioss”,默认文件上传到阿里“alioss”,如果修改为local,下面第184行内容却为“upload: /opt/jeecg-boot/upload”。

在这里插入图片描述

“application-dev.yml”文件第177行为“uploadType: local”,但是第184行却为“upload: /opt/upFiles”。 在这里插入图片描述

注意到了吗?选用不同yml配置Maven,存储的地方不一样。所以,既然我选择用dev,那么群晖nas的docker-compose部署脚本就相应修改为: /volume1/docker/后端目录/tomcat/upFiles挂载至/opt/upFiles 在这里插入图片描述

在这里插入图片描述 tomcat目录下Dockerfile文件内容就是照搬jeecg-boot里的相应文件。内容如下,仅仅删除了原文延时60秒。

FROM anapsix/alpine-java:8_server-jre_unlimited MAINTAINER hello RUN ln -sf /usr/share/zoneinfo/Asia/Shanghai /etc/localtime WORKDIR /jeecg-boot EXPOSE 8080 ADD ./target/jeecg-system-start-3.5.1.jar ./ CMD java -Djava.security.egd=file:/dev/./urandom -jar jeecg-system-start-3.5.1.jar

如果顺利,后端跑起来会出错。因为mysql缺少jeecg-boot的数据库。此时可以停止jeecg-boot-system容器。通过Navicat或其他软件,将后端源代码db目录的三个sql文件(“jeecgboot-mysql-5.7.sql”、“tables_nacos.sql”、“tables_xxl_job.sql”)导入mysql。 注意vue3切换为vue2的sql。

alter table sys_permission rename as sys_permission_v3; alter table sys_permission_v2 rename as sys_permission;

因为jeecg-boot默认是支持vue3的,所以数据库需要区分你的前端代码是“ant-design-vue-jeecg”(vue2开发),还是“ jeecgboot-vue3”(vue3开发)。两种前端的菜单需要mysql不同的语句来实现。因此当你使用默认的jeecg-boot的db目录的sql脚本导入mysql时,运行前端vue2网页时会有提示而导致前端无法登录。

详见我的另外两篇有关文章。 在这里插入图片描述 验证码正常显示,说明前端后端均已部署成功。



【本文地址】


今日新闻


推荐新闻


CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3